#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

void swap(char * a,char * b){

    char temp = *a;
    *a = *b;
    *b = temp;
}

static int count = 0;

void printArray(char * array,int number){

    for(int index = 0;index < number;index++){

        printf("%c ",array[index]);
    }
    printf(" . count = %d\n",count++);
}
void composeHelp(char * array,int low,int high){

    // 没有元素了
    if(low == high){
        printArray(array,high);
        return;        
    }
    // if(low == 0){

    //     swap(&array[0],&array[1]);
    // }
    for(int index = low;index < high;index++){
        // if(low == 0 && array[index] == 'B'){
            swap(&array[low],&array[index]);
            composeHelp(array,low+1,high);
            swap(&array[low],&array[index]);
        // }else if(low!=0){
        //     swap(&array[low],&array[index]);
        //     composeHelp(array,low+1,high);
        //     swap(&array[low],&array[index]);
        // }
    }
}
void compose(char * array,int low,int number){

    composeHelp(array,0,number);
}

int
main(int argc,char * argv[]){

    char * array = malloc(sizeof(char) * 4);
    array[0] = 'A';
    array[1] = 'B';
    array[2] = 'C';
    array[3] = 'D';

    compose(array,0,4);

    free(array);
    return 0;
}